#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>

// 子线程处理代码
void* callback(void* arg)
{
    for(int i = 0; i < 5; ++i)
    {
        printf("子线程:i = %d\n", i);
    }
    printf("子线程:%ld\n", pthread_self());

    return NULL;
}

int main()
{
    pthread_t tid; // 创建子线程
    pthread_create(&tid, NULL, callback, NULL);
    for(int i = 0; i < 5; ++i)
    {
        printf("主线程:i = %d\n", i);
    }
    printf("主线程:%ld\n", pthread_self());

    // sleep(1); // 挂起函数：防止主线程执行完毕导致子线程被销毁

    return 0;
}

/*
    主线程:i = 0
    主线程:i = 1
    主线程:i = 2
    主线程:i = 3
    主线程:i = 4
    主线程:139931375142720

    并未看到子线程的日志输出，由于子线程创建完成后需要抢cpu时间片，而主线程执行完毕后虚拟地址被释放，子线程一并被销毁。
    注：在没有人为干预的情况下，虚拟地址空间的生命周期和主线程是一样的，与子线程无关。
*/